import java.util.Arrays;

public class MyStack {
    //存放元素的数组
    public int[] elem;
    //栈的元素个数
    public int usedSize;
    public static final int DEFAULT_CAPACITY = 10;//默认栈的容量
    public MyStack() {
        this.elem = new int[DEFAULT_CAPACITY];
    }
    //判断栈是否满了
    private boolean isFull() {
        return usedSize == elem.length;
    }
    //判断栈是否为空
    private boolean isEmpty() {
        return usedSize == 0;
    }
    //入栈操作
    public void push(int val) {
        //判满，满了扩容
        if(isFull()) {
            //2倍扩容
            this.elem = Arrays.copyOf(elem,2*elem.length);
        }
        //元素入栈
        elem[usedSize] = val;
        //个数加一
        usedSize++;
    }
    //出栈操作
    //出栈且弹出元素
    public int pop() {
        //先进行栈的判空
        if(isEmpty()) {
            throw new EmptyStackException("栈为空...");
        }
        //拿到栈顶元素
        int inElement = elem[usedSize-1];
        //元素个数减1
        usedSize--;
        return inElement;
    }
    //取出栈顶元素
    public int peek() {
        //判空
        if(isEmpty()) {
            throw new EmptyStackException("栈为空...");
        }
        return elem[usedSize-1];
    }
    //获取元素个数
    public int getSize() {
        return usedSize;
    }
}
